const express = require("express");
const mongoose = require("mongoose");
const app = express();

app.use(express.json()); // 让框架能够解析json格式的数据

// express中路由查找按照从上往下找

// 在项目中public文件夹一般表示静态资源目录
// 这个文件夹中的文件是可以直接在客户端访问到的
//  为express项目设置静态资源目录
//    参数一 表示url中访问的路径
//    参数二 表示静态资源的目录
app.use("/", express.static("./public"));
app.use("/s", express.static("./static"));

mongoose
  .connect("mongodb://localhost:27017/db-2207")
  .then(() => {
    console.log("数据库连接成功");
  })
  .catch((err) => {
    console.log(err);
  });

// req 表示request 请求
// res 表示response 响应
app.get("/", (req, res) => {
  res.send("123");
});

const Person = require("./models/person");
app.get("/api/v1/people", async (req, res) => {
  const data = await Person.find({}).sort({
    _id: -1,
  });
  res.json(data);
});

// :id 表示占位符
//  动态路由
//  可以通过 /api/v1/people/1 /api/v1/people/2
app.get("/api/v1/people/:id", async (req, res) => {
  // req.params // 可以获取路由中的参数，返回的是一个对象
  const data = await Person.findById(req.params.id);
  res.json(data);
});

app.post("/api/v1/people", async (req, res) => {
  if (req.body.name) {
    const data = new Person(req.body);
    await data.save();
    res.json({
      code: 1,
      data: "保存成功",
    });
  } else {
    res.json({
      code: 0,
      data: "name不能为空",
    });
  }
});

app.put("/api/v1/people/:id", async (req, res) => {
  await Person.findByIdAndUpdate(req.params.id, req.body);
  res.json({
    code: 1,
    data: "修改成功",
  });
});

app.delete("/api/v1/people/:id", async (req, res) => {
  await Person.findByIdAndDelete(req.params.id);
  res.json({
    code: 1,
    data: "删除成功",
  });
});

// use 作用是使用一个中间件
//  参数一 表示url中访问的路径
//  参数二 表示处理函数
app.use("/api/v1/products", require("./routes/api/v1/products"));
app.use("/api/v1/movies", require("./routes/api/v1/movies"));

app.listen(3000, () => {
  console.log("服务器运行在3000端口");
});
